package model

import "encoding/xml"

type Opf struct {
	XMLName   xml.Name `xml:"package"`
	Namespace string   `xml:"xmlns,attr"`
	ID        string   `xml:"unique-identifier,attr"`
	Version   string   `xml:"version,attr"`
	Metadata  Metadata `xml:"metadata"`
	Manifest  Manifest `xml:"manifest"`
	Spine     Spine    `xml:"spine"`
}

// Metadata 结构体表示元数据
type Metadata struct {
	Identifier  Identifier `xml:"identifier"`
	Title       string     `xml:"title"`
	Language    string     `xml:"language"`
	Description string     `xml:"description"`
	Creator     string     `xml:"creator"`
	Cover       string     `xml:"meta;name=conver"`
	Modified    string     `xml:"meta>property"`
}

// Identifier 结构体表示标识符
type Identifier struct {
	ID   string `xml:"id,attr"`
	UUID string `xml:",chardata"`
}

// Manifest 结构体表示清单
type Manifest struct {
	Items []Item `xml:"item"`
}

// Item 结构体表示清单中的每个项
type Item struct {
	ID         string `xml:"id,attr"`
	Href       string `xml:"href,attr"`
	MediaType  string `xml:"media-type,attr"`
	Properties string `xml:"properties,attr,omitempty"`
}

// Spine 结构体表示内容结构
type Spine struct {
	TOC   string    `xml:"toc,attr"`
	Items []ItemRef `xml:"itemref"`
}

// ItemRef 结构体表示 spine 中的每个引用项
type ItemRef struct {
	IDRef string `xml:"idref,attr"`
}
